package com.example.ecommercemarketing.exception;

import lombok.Getter;
import lombok.Setter;

/**
 * 推荐服务异常类
 * <p>用于处理推荐服务相关的业务异常</p>
 */
@Getter
@Setter
public class RecommendServiceException extends RuntimeException {

    /**
     * 序列化版本UID
     * <p>用于保证序列化/反序列化的兼容性</p>
     * <p>当类结构发生变化时，应更新此值</p>
     */
    private static final long serialVersionUID = -7034897445511554661L;

    /**
     * 默认构造函数
     * <p>创建一个不带详细消息的异常实例</p>
     */
    public RecommendServiceException() {
        super();
    }

    /**
     * 带错误消息的构造函数
     * @param message 异常详细信息
     * <p>用于描述异常的具体原因</p>
     */
    public RecommendServiceException(String message) {
        super(message);
    }

    /**
     * 带错误消息和原因的构造函数
     * @param message 异常详细信息
     * @param cause 异常原因（底层异常）
     * <p>用于包装底层异常并提供自定义错误信息</p>
     */
    public RecommendServiceException(String message, Throwable cause) {
        super(message, cause);
    }

    /**
     * 带异常原因的构造函数
     * @param cause 异常原因（底层异常）
     * <p>用于直接包装底层异常</p>
     */
    public RecommendServiceException(Throwable cause) {
        super(cause);
    }

    /**
     * 完整的异常构造函数
     * @param message 异常详细信息
     * @param cause 异常原因
     * @param enableSuppression 是否启用抑制异常
     * @param writableStackTrace 是否生成可写的堆栈跟踪
     * <p>提供对异常行为的更精细控制</p>
     * <p>通常用于高级异常处理场景</p>
     */
    protected RecommendServiceException(String message, Throwable cause,
                                        boolean enableSuppression,
                                        boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}